from rest_framework import viewsets, status

from utils.base_views import MultipleDestroyMixin
from utils.pageination import GlobalPagination
from ..models import DeptModel
from ..serializers import DeptSerializer


class DeptView(viewsets.ModelViewSet, MultipleDestroyMixin):
    """
    create:
    部门--新增
    status： 201（成功）， return：新增部门信息

    destroy：
    部门--删除 单个部门
    status： 204（成功）， return：None

    multiple_destroy：
    部门--批量删除 多个部门
    status： 204（成功）， return：None

    update：
    部门--修改  修改部门本身的信息（属性）
    status： 200（成功）， return：修改增部门信息

    partial_update：
    部门--修改  修改部门本身的信息（属性）
    status： 200（成功）， return：修改增部门信息

    list:
    部门--获取所有部门
    请求参数有pid；父部门的ID， 1、如果没有传pid， 则查询所有部门.2、如果传过来的的pid=0， 则查询顶级部门列表；3、如果传过来的pid=非零， 则查询某个父部门以下的子部门列表

    retrieve:
    查询单个部门
    返回部门列表 status: 200（成功）， return：返回部门列表
    """
    queryset = DeptModel.objects.all()
    serializer_class = DeptSerializer
    pagination_class = GlobalPagination

    def get_queryset(self):
        """
        请求参数有pid；父部门的ID，
        1、如果没有传pid， 则查询所有部门
        2、如果传过来的的pid=0， 则查询顶级部门列表
        3、如果传过来的pid=非零， 则查询某个父部门以下的子部门列表
        :return:
        """
        pid = self.request.query_params.get("pid", None)
        if pid:
            integer_pid = int(pid)
            if integer_pid == 0:
                return DeptModel.objects.filter(parent__isnull=True).all()
            else:
                return DeptModel.objects.filter(parent_id=integer_pid).all()
        else:
            return DeptModel.objects.all()
